import { defineStore } from 'pinia'
import { MenuApi } from '@/api/menu/index.js'
import { ElMessage } from 'element-plus'

export const useMenuStore = defineStore('menu', {
    state: () => ({
        menuList: [], // 菜单列表数据
        menuTree: [], // 菜单树形数据
        pageInfo: {   // 分页信息
            page: 1,
            size: 10,
            total: 0,
            totalPage: 0
        }
    }),

    actions: {
        // 获取菜单列表
        async getMenuList(params = {}) {
            try {
                // 合并分页参数
                const queryParams = {
                    ...this.pageInfo,
                    ...params
                }

                const res = await MenuApi.list(queryParams)
                console.log("res表中的数据",res);
                this.menuList = res.data.data.records
                console.log("菜单列表中的数据",res.data.records);
                console.log("菜单列表中的数据",res.data.data.records);

                this.pageInfo.page = res.data.data.pageNumber
                this.pageInfo.size = res.data.data.pageSize
                this.pageInfo.total = res.data.data.total
                this.pageInfo.totalPage = res.data.data.totalPage

                return res
            } catch (error) {
                ElMessage.error('获取菜单列表失败')
                throw error
            }
        },

        // 获取菜单详情
        async getMenuDetail(id) {
            try {
                const res = await MenuApi.detail(id)
                return res
            } catch (error) {
                ElMessage.error('获取菜单详情失败')
                throw error
            }
        },

        // 获取菜单树
        async getMenuTree() {
            try {
                const res = await MenuApi.tree()
                this.menuTree = res.data.data
                return res
            } catch (error) {
                ElMessage.error('获取菜单树失败')
                throw error
            }
        },
        // 【新增】在原有代码基础上添加以下方法
        async loadFullMenuTree() {
            await this.getMenuTree()
            // 为树形数据添加状态控制
            this.menuTree = this.processTreeData(this.menuTree)
        },
        processTreeData(nodes) {
            return nodes.map(node => ({
                ...node,
                // 添加前端需要的状态字段
                expanded: true,
                loaded: true,
                children: node.children ? this.processTreeData(node.children) : []
            }))
        },

        // // 获取菜单树
        // async getMenuTree() {
        //     try {
        //         const res = await MenuApi.tree()
        //         this.menuTree = res.data.data
        //         return res
        //     } catch (error) {
        //         ElMessage.error('获取菜单树失败')
        //         throw error
        //     }
        // },
        // // 在 useMenuStore.js 中增强树形功能
        // async loadFullTree() {
        //     await this.getMenuTree()
        //     // 添加展开状态等树形控制属性
        //     this.menuTree = this.addTreeState(this.menuTree)
        // },
        // addTreeState(nodes) {
        //     return nodes.map(node => ({
        //         ...node,
        //         expanded: false,
        //         children: node.children ? this.addTreeState(node.children) : []
        //     }))
        // },

        // 创建菜单
        async createMenu(data) {
            try {
                const res = await MenuApi.create(data)
                ElMessage.success('创建菜单成功')
                await this.getMenuList() // 刷新列表
                return res
            } catch (error) {
                ElMessage.error('创建菜单失败')
                throw error
            }
        },

        // 更新菜单
        async updateMenu(data) {
            try {
                const res = await MenuApi.update(data)
                ElMessage.success('更新菜单成功')
                await this.getMenuList() // 刷新列表
                return res
            } catch (error) {
                ElMessage.error('更新菜单失败')
                throw error
            }
        },

        // 删除菜单
        async deleteMenu(id) {
            try {
                const res = await MenuApi.delete(id)
                ElMessage.success('删除菜单成功')
                await this.getMenuList() // 刷新列表
                return res
            } catch (error) {
                ElMessage.error('删除菜单失败')
                throw error
            }
        },

        // 更新分页信息
        updatePageInfo(pageInfo) {
            this.pageInfo = { ...this.pageInfo, ...pageInfo }
        }
    }
})